package 高频题;

import java.util.Stack;

public class 字符串解码_394 {
    public static void main(String[] args) {
        new 字符串解码_394().decodeString("3[a]2[bc]");
    }
    public String decodeString(String s) {
        StringBuilder res = new StringBuilder();
        int multi = 0;
        Stack<Integer> stack_multi = new Stack<>();
        Stack<String> stack_res = new Stack<>();

        for (Character c : s.toCharArray()) {
            if (c == '[') {
//                当前 multi 和 res 入栈,并且把原来的multi和res置为0、null
                stack_multi.push(multi);
                stack_res.push(res.toString());
                multi = 0;
                res = new StringBuilder();
            } else if (c == ']') {
//                stack 出栈，拼接字符串 res = last_res + cur_multi * res
                StringBuilder tmp = new StringBuilder();
                int cur_multi = stack_multi.pop();
                for (int i = 0; i < cur_multi; i++) {
                    tmp.append(res);
                }
                res = new StringBuilder(stack_res.pop() + tmp);
            } else if (c >= '0' && c <= '9') {
//                当 c 为数字时，将数字字符转化为数字 multi，用于后续倍数计算；
                multi = multi * 10 + Integer.parseInt(c + "");
            } else {
//                当 c 为字母时，在 res 尾部添加 c；
                res.append(c);
            }
        }
        return res.toString();
    }
}
